package com.glela.common.util;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;

/**
 * @author liujie json 包装类 for controller
 */
public final class PlainUtil
{
	public static String booleanToString(Boolean onlineStatus)
	{
		return onlineStatus ? "online" : "offline";
	}

	public static String connectToStr(Object... oo)
	{
		if (null == oo || 0 == oo.length) {
			return "";
		}
		StringBuilder s = new StringBuilder();
		for (Object element : oo) {
			s.append(element);
		}
		return s.toString();
	}

	public static Object generateJson(String msg, Object obj, boolean isSucess)
	{
		JSONObject json = new JSONObject();
		json.put("result", obj);
		json.put("msg", msg);
		json.put("succ", isSucess);
		return json.toString();
	}

	public static String generateJson(String msg, Object obj, boolean status, String jsonpCallback)
	{
		JSONObject json = new JSONObject();
		json.put("result", obj);
		json.put("msg", msg);
		json.put("succ", status);
		if (StringUtils.isEmpty(jsonpCallback)) {
			return json.toString();
		}
		return jsonpCallback + "(" + json.toString() + ")";
	}

	public static String generateJson(String msg, Object obj, boolean status,
			String jsonpCallback, String dateFormat) {
		JSONObject json = new JSONObject();
		json.put("result", obj);
		json.put("msg", msg);
		json.put("succ", status);
		if (StringUtils.isEmpty(jsonpCallback)) {
			return JSONObject.toJSONStringWithDateFormat(json, dateFormat);
		}
		return jsonpCallback + "(" + json.toString() + ")";
	}

	public static Object generateJson(String msg, Object obj,
			Object jsonpCallback, boolean isSucess, Object errorCode) {
		JSONObject json = new JSONObject();
		json.put("result", obj);
		json.put("msg", msg);
		json.put("succ", isSucess);
		json.put("code", errorCode);
		if (jsonpCallback == null) {
			return json.toString();
		}
		return jsonpCallback + "(" + json.toString() + ")";
	}

	public static String generateNoPriviligeSessionkeyJSON()
	{
		JSONObject json = new JSONObject();
		json.put("msg", "sessionkey_noright");
		json.put("succ", false);
		json.put("code", 402);
		return json.toString();
	}

	public static String generateNoPriviligeSessionkeyJSON(String jsonpCallback)
	{
		JSONObject json = new JSONObject();
		json.put("msg", "sessionkey_noright");
		json.put("succ", false);
		json.put("code", 402);
		if (StringUtils.isEmpty(jsonpCallback)) {
			return json.toString();
		}
		return jsonpCallback + "(" + json.toString() + ")";
	}

	public static String generateTwoJson(String msg, Object obj, Object obj2, boolean status, String jsonpCallback)
	{
		JSONObject json = new JSONObject();
		json.put("result", obj);
		json.put("resultlast", obj2);
		json.put("msg", msg);
		json.put("succ", status);
		if (StringUtils.isEmpty(jsonpCallback)) {
			return json.toString();
		}
		return jsonpCallback + "(" + json.toString() + ")";
	}

	public static String getReverseOnlineStatus(String onlineStatus)
	{
		return onlineStatus.equals("online") ? "offline" : "online";
	}

	public static boolean isContain(String whole, String part)
	{
		if (StringUtils.isNotBlank(whole)) {
			if (!StringUtils.isNotBlank(part)) {
				return true;
			}
			whole = whole.toLowerCase();
			part = part.toLowerCase();
			return whole.indexOf(part) >= 0;
		}
		else {
			return !StringUtils.isNotBlank(part);
		}
	}

	public static String paramsLostCheck(JSONObject jo, String... keys)
	{
		List<String> lost = new LinkedList<String>();
		String msg = null;
		if (null != jo) {
			for (String k : keys) {
				if (null == jo.get(k)) {
					lost.add(k);
				}
			}
			if (!lost.isEmpty()) {
				StringBuilder s = new StringBuilder();
				s.append("lost params :");
				for (String l : lost) {
					s.append(l).append(';');
				}
				msg = s.toString();
			}
		}
		return msg;
	}

	@SuppressWarnings("serial")
	public static Set<String> toStringSet(final Set<Long> s)
	{
		return null != s ? new HashSet<String>() {
			{
				for (Long l : s) {
					add(l.toString());
				}
			}
		} : null;
	}

	private PlainUtil()
	{
	}

}
